#include <stdio.h>
#include<malloc.h>
int main() {
    int n;
    scanf("%d", &n);
    long int* a = (long int*)malloc(n * sizeof(long int));
    for (int i = 0; i < n; i++) {
        scanf("%ld", &a[i]);
    }
    int k = 0;
    long int x = a[0];
    for (int i = 0; i < n; i++) {
        if (a[i] < x)
            x = a[i];
    }
    for (int i = 0; i < n; i++) {
        if (a[i] == x)
            k++;
    }
    if(k != 1 || a[0] == x || a[n - 1] == x)//应对"1 2 3 2 3""2 2 3 2 1""1 2 1 2 3"类数据
        printf("%d", n - k);
    else {
        int t = 0;
        for (int i = 0; i < n; i++) {
            if (a[i] == x) {
                t = i;
                break;
            }
        }
        int b = a[0], c = a[t + 1], m = 0, h = 0;
        for (int i = 0; i < t; i++) {
            if (a[i] < b)
                b = a[i];
        } 
        for (int i = 0; i < t; i++) {
            if (a[i] == b)
                m++;
        }
        for (int i = t + 1; i < n; i++) {
            if (a[i] < c)
                c = a[i];
        }        
        for (int i = t + 1; i < n; i++) {
            if (a[i] == c)
                h++;
        }
        if(b != c
            printf("%d", n - k);//应对"6 5 4 3 1 2 2 2 3 2"类数据
        else
            printf("%d", n - k - (h > m? m : h));//应对"6 5 4 3 2 1 2 2 2 2"类数据
    }
    free(a);
    return 0;
}


/*fangbaby获得了一个大小为n的数组A{a1,a2,...,an}。他想知道对于每一个满足 1≤i<n 的下标 i ，定义以下两个子数组：

B={a1,a2,…,ai},C={ai+1,ai+2,…,an}.

令

cntB=∣{x∈B∣x>min(C)}∣，表示 B 中严格大于 C 中最小值的元素个数。

cntC=∣{x∈C∣x>min(B)}∣，表示 C 中严格大于 B 中最小值的元素个数。

求max (cntB+cntC)

## 输入格式

第一行给定一个整数n表示数组的长度。（1<=n<=1e6）

第二行给定n个由空格分开的正整数ai表示的数组。（1<=ai<=1e9）

## 输出格式

输出一个正整数表示符合题意得最大数量。*/